/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.model;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 *Constructor de la clase
 * @author Jorge
 */
public class Test {
    
    private int idTest;
    private String nombre;
    private String descripcion;
    private Date fechaInicio;
    private Date fechaFin;
    private Set<Pregunta> preguntas;

    /**
     * Añade una pregunta
     * @param p
     */
    public void addPregunta(Pregunta p) {
        this.preguntas.add(p);
    }
    
    /**
     * Establece preguntas
     * @param preguntas
     */
    public void setPreguntas(Set<Pregunta> preguntas) {
        this.preguntas = new HashSet<Pregunta>(preguntas);
    }
    
    /**
     * Devuelve el conjunto de preguntas del test
     * @return Set<Pregunta>
     */
    public Set<Pregunta> getPreguntas() {
        return preguntas;
    }
    
     /**
      * Constructor de la clase
      */
     public Test() {
        
    }
    
     /**
      * Constructor de la clase.
      * @param idTest
      * @param nombre
      * @param descripcion
      * @param fechaInicio
      * @param fechaFin
      */
     public Test(int idTest, String nombre,String descripcion, Date fechaInicio, Date fechaFin)
    {
        this.idTest = idTest;
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
        this.preguntas = new HashSet<Pregunta>();
    }
    
    /**
     * Constructor de la clase.
     * @param nombre
     * @param descripcion
     * @param fechaInicio
     * @param fechaFin
     */
    public Test(String nombre,String descripcion, Date fechaInicio, Date fechaFin)
    {
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
        this.preguntas = new HashSet<Pregunta>();
    }

    /**
     * @return the idTest
     */
    public int getIdTest() {
        return idTest; 
    }

    /**
     * @param idTest the idTest to set
     */
    public void setIdTest(int idTest) {
        this.idTest = idTest;
    }

    /**
     * @return the fechaInicio
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * @param fechaInicio the fechaInicio to set
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    /**
     * @return the fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * @return the numPreguntas
     */
    public int getNumPreguntas() {
        return this.getPreguntas().size();
    }

    /**
     * Devuelve nombre
     * @return String nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Establece nombre
     * @param nombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Devuelve descripcion
     * @return String
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Establece descripcion
     * @param descripcion
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * Devuelve el numero de aciertos.
     * @return int
     */
    public int getAciertos() {
        int aciertos = 0;
        for (Pregunta p : preguntas) {
            if (p.isAcertada()) {
                aciertos++;
            }
        }
        return aciertos;
    }

    /**
     * Devuelve la pregunta con idPreg
     * @param idPreg
     * @return Pregunta
     */
    public Pregunta getPregunta(int idPreg){
        Iterator it = this.preguntas.iterator();
        Pregunta p=null;
        while(it.hasNext()){
            Pregunta aux=(Pregunta)it.next();
            if(aux.getIdPregunta()==idPreg){
                p=aux;
            }
        }
        return p;
    }
    
    /**
     * Devuelve la nota.
     * @return float nota
     */
    public float getNota() {
        return 10*((float)getAciertos())/getNumPreguntas();
    }
    
    /**
     * Devuelve la hora de inicio.
     * @return String hora de inicio
     */
    public String getStartHour() {
        DateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
        return dateFormat.format(getFechaInicio());
    }
    
    /**
     * Devuelve la hora de finalización.
     * @return String 
     */
    public String getEndHour() {
        DateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
        return dateFormat.format(getFechaFin());
    }

    @Override
    public String toString(){
        return this.nombre;
    }
}
